home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 May: Tool Chest / Developer CD Series May 1996 (Tool Chest) (Apple Computer) (1996).iso / Sample Code / Macintosh Sample Code / SC.024.SoundApp / SoundApp.r < prev    next >
Encoding:
Text File  |  1994-11-18  |  43.9 KB  |  1,038 lines  |  [TEXT/MPS ]

  1. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2. #
  3. # Apple Macintosh Developer Technical Support
  4. #
  5. # MultiFinder-Aware SoundApp Application
  6. #
  7. # SoundApp
  8. #
  9. # SoundApp.r    -    Rez Source
  10. #
  11. # Jim Reekes - Macintosh Developer Technical Support
  12. # Copyright © 1989-1991 Apple Computer, Inc.
  13. # All rights reserved.
  14. #
  15. # Versions:
  16. #             1.03                    May, 1990
  17. #            1.1b1                    Oct, 1990            added support for Sound Input Manager
  18. #
  19. # Components:
  20. #             SoundApp.make        May 1, 1990            MPW build script
  21. #             SoundApp.p            May 1, 1990            Pascal source code
  22. #             SoundApp.r            May 1, 1990            Rez source code
  23. #             SoundAppSnds.r        May 1, 1990            Rez source code
  24. #             SoundUnit.p            May 1, 1990            Pascal source code
  25. #
  26. # Formatting was done with FONT = Monaco, SIZE = 9, TABS = 3
  27. #
  28. # SoundApp.p is a sample application source file for demonstrating
  29. # the Sound Manager.  It requires the use of the SoundUnit to handle
  30. # all of the sound routines.  This portion of the source code handles the
  31. # application’s management of memory, errors, user interface, etc..
  32. #
  33. # Jim Reekes E.O., Macintosh Developer Technical Support
  34. # Tuesday, January 30, 1990  1:01 PM
  35. #
  36. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  37.  
  38. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  39. // INCLUDES
  40. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  41.  
  42. #include "Types.r"
  43. #include "SysTypes.r"
  44.  
  45. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  46. // CONSTANTS
  47. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  48.  
  49. // These #defines are used to set enable/disable flags of a menu
  50. #define AllItems        0b1111111111111111111111111111111    /* 31 bits worth of flags */
  51. #define NoItems        0b0000000000000000000000000000000
  52. #define MenuItem1        0b0000000000000000000000000000001
  53. #define MenuItem2        0b0000000000000000000000000000010
  54. #define MenuItem3        0b0000000000000000000000000000100
  55. #define MenuItem4        0b0000000000000000000000000001000
  56. #define MenuItem5        0b0000000000000000000000000010000
  57. #define MenuItem6        0b0000000000000000000000000100000
  58. #define MenuItem7        0b0000000000000000000000001000000
  59. #define MenuItem8        0b0000000000000000000000010000000
  60. #define MenuItem9        0b0000000000000000000000100000000
  61. #define MenuItem10    0b0000000000000000000001000000000
  62. #define MenuItem11    0b0000000000000000000010000000000
  63. #define MenuItem12    0b0000000000000000000100000000000
  64.  
  65.  
  66. /* These values are used in SIZE resource. */
  67.  
  68. #define kMinSize                150        /*application’s minimum size (in K)*/
  69. #define kPrefSize                300        /*application’s preferred size (in K)*/
  70.  
  71. /* This is the rectangle of where to place the icon in an alert. */
  72.  
  73. #define kStdAlertIconRect    {10, 20, 42, 52}
  74.  
  75. /* These constants are the size of a standard button and the default button.
  76.    In this application, the default button is always placed centered at the
  77.     bottom of the window. */
  78.  
  79. #define kButtonFrameInset    -4        /* inset rectangle adjustment around button */
  80. #define kButtonSizeW            74
  81. #define kButtonSizeH            17
  82. #define kDafaultButSizeW    (kButtonSizeW - kButtonFrameInset - kButtonFrameInset)
  83. #define kDafaultButSizeH    (kButtonSizeH - kButtonFrameInset - kButtonFrameInset)
  84.  
  85. /* These constants are used in defining the size of the application’s windows.
  86.    All of the following windows are dymanically positioned on screen by
  87.     the application.  These values will change the height and width of the windows. */
  88.  
  89. #define kExitAlertSizeH        129
  90. #define kExitAlertSizeW        248
  91. #define kUserAlertSizeH        129
  92. #define kUserAlertSizeW        304
  93. #define kSoundVolSizeH        96
  94. #define kSoundVolSizeW        240
  95. #define kAboutWindowSizeH    232
  96. #define kAboutWindowSizeW    336
  97. #define kStatusWindowSizeH    96
  98. #define kStatusWindowSizeW    240
  99.  
  100. /* Believe it or not, I found this complication to be very useful.
  101.     Normally, people tend to use ResEdit to change the layout of a window
  102.     especially for dialogs.  I have a difficult time getting the pixels
  103.     exactly right using ResEdit.  People said I could then DeRez the window
  104.     and make the adjustments.  This was just a difficult.  I needed some
  105.     scratch paper and a calculator.  After thinking about it, I wrote these
  106.     definitions of my window’s geometry.  This ended up in a scheme that I
  107.     found to be much more helpful in building the exact window I wanted.  The
  108.     document window has all items spaced apart from each a consistent amount.
  109.     The size of the items are consistent and spaced equally apart from each
  110.     other. 
  111.     
  112.     VERSION 1.1:  The height of the window defaults NOT to show the last button
  113.     which is used for recording.  Typically, I suspect that most of the time
  114.     the Sound Input Manager will not be present.  Thus I'm going to hide the
  115.     record button.  If the application determines that Sound Input is available
  116.     then it resizes the window to show the record button. */
  117.  
  118. #define kNumOfButtons        6        /* the number of buttons in the window */
  119. #define kSndStdSpacing        8        /* adjusts the relative spacing of the entire window */
  120. #define kSndButtonSizeW        100    /* SizeW of buttons in document window */
  121. #define kSndButtonSizeH        24        /* heigth of buttons in document window */
  122. #define kSndListButGap        (16 + (2 * kSndStdSpacing)) /* list’s scroll bar and more */
  123. #define kSoundWindowSizeH    (((kNumOfButtons-1) * kSndStdSpacing) + ((kNumOfButtons-1) * kSndButtonSizeH) + kSndStdSpacing)
  124. #define kSoundWindowSizeW    296
  125.  
  126. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  127. // RESOURCE ID NUMBERS
  128. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  129. // ALRT resources
  130. #define rExitAlert            1000        /*emergency exit user alert*/
  131. #define rUserAlert            1001        /*error message user alert*/
  132. #define rSoundVol                1002        /*volume too low message*/
  133. #define rSaveAlert            1003        /*save this document?*/
  134.  
  135. // DLOG resources
  136. #define rGetNameDLOG            1000        /*get name for sound dialog*/
  137. #define rSFPGetFileDLOG        -4000        /*custom SFPGetFile dialog*/
  138.  
  139. // BNDL resource information
  140. #define rAppBundle            1000        /*application’s bundle resource ID*/
  141. #define rAppSignature         'SAPP'    /*applicaiton’s OS signature*/
  142. #define rSndAppDocType        'sDoc'    /*document's file type*/
  143.  
  144. // CNTL resources
  145. #define rCancelCntl            1000        /*button ID for the status window*/
  146. #define rPlaySndCntl            1001        /*button ID for the document window*/
  147. #define rHyperPlayCntl        1002        /*button ID for the document window*/
  148. #define rPlayScaleCntl        1003        /*button ID for the document window*/
  149. #define rPlayMelodyCntl        1004        /*button ID for the document window*/
  150. #define rStopCntl                1005        /*button ID for the document window*/
  151. #define rRecordCntl            1006        /*button ID for the document window*/
  152. #define rAboutOKCntl            1007        /*button ID for the about window*/
  153.  
  154. // CURS resources
  155. #define rSndCursor            1000        /*document cursor ID*/
  156. #define rACursor1                1001        /*animated cursor ID*/
  157. #define rACursor2                1002        /*animated cursor ID*/
  158. #define rACursor3                1003        /*animated cursor ID*/
  159. #define rACursor4                1004        /*animated cursor ID*/
  160.  
  161. // ICON resources
  162. #define rNoteIcon                1            /*the note icon*/
  163. #define rCautionIcon            2            /*the caution icon*/
  164. #define rMoofIcon                1000        /*application ID for all the icon types*/
  165. #define rSndDocIcon            1001        /*document ID for all the icon types*/
  166.  
  167. // MENU resources.  The following constants have a “m” prefix to notate they’re menus.
  168. #define rMenuBar                1000        /*application’s menu bar*/
  169. #define mApple                    128        /*Apple menu*/
  170. #define mFile                    129        /*File menu*/
  171. #define mEdit                    130        /*Edit menu*/
  172. #define mDemos                    1000        /*Demo menu*/
  173.  
  174. // PICT resources
  175. #define rAppPict                1000        /*picture appearing in about window*/
  176.  
  177. // RECT resources, custom made to order
  178. #define rListRectID            1000        /*size of list rectangle*/
  179.  
  180. // STR resources
  181. #define rUntitled                1000        /*string for untitled snd resources*/
  182. #define rAboutText            1001        /*string for text appearing in about window*/
  183. #define rPutFileMsg            1002        /*string for text appearing in SFPutFile dialog*/
  184.  
  185. // STR# resources.  The following constants have a “s” prefix to notate they’re strings.
  186. #define sErrStrings            1000        /*error strings STR# ID*/
  187. #define sMessStrings            1001        /*message strings STR# ID for status window*/
  188. #define sSMErrStrings        1002        /*message strings of Sound Manager errors*/
  189.  
  190. // WIND resources.  All windows used in the application need a unique resource ID.
  191. #define rAboutWindow            1000        /*about dialog*/
  192. #define rStatusWindow        1001        /*status window ID used to show current sound*/
  193. #define rSoundWindow            1002        /*sound document window ID*/
  194.  
  195.  
  196. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  197. // RESOURCE TYPES
  198. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  199.  
  200. /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  201.  The animated cursor resource used in the MPW CursorCtl unit is not
  202.  defined by MPW.  So, I’ve created the type for it. */
  203.  
  204. type 'acur' {
  205.     integer = $$Countof(AcursArray);    /*Number of cursors (“frames of film”)*/
  206.     fill word;                                /*Next frame to show <for internal use>*/
  207.     wide array AcursArray {
  208.         integer;                                /*'CURS' resource id for frame #1*/
  209.         fill word;                            /*<for internal use>*/
  210.     };
  211. };
  212.  
  213. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  214.  This is a definition for a resource which contains only a rectangle */
  215.  
  216. type 'RECT' {
  217.     rect;
  218. };
  219.  
  220. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  221. // RESOURCE DEFINITIONS
  222. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  223.  
  224. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  225.  This is the vers resource used by the Finder in the Get Info window.
  226.  I also display the short version number in the about window. */
  227.  
  228. resource 'vers' (1, purgeable) {
  229.     0x1, 0x10, beta, 0x3, verUs, "1.1b3", "1.1b3, Copyright © 1989-91 Apple Computer"
  230. };
  231.  
  232. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  233.  These are the resources used for the animated cursors.  They are preloaded
  234.  and non-purgeable to help reduce memory fragmentation. */
  235.  
  236. resource 'acur' (0, preload, nonPurgeable) {
  237.     {rACursor1, rACursor2, rACursor3, rACursor4}
  238. };
  239.  
  240. resource 'CURS' (rACursor1, preload, nonPurgeable) {
  241.     $"00 00 00 00 00 00 16 00 3E 01 54 03 C3 05 F3 FD"
  242.     $"08 FA 0C 72 0C 02 0D F2 0A 0A 0A 0A 0A 0A 1C 1E",
  243.     $"00 00 00 00 00 00 16 00 3E 01 7C 03 FF 07 FF FF"
  244.     $"0F FE 0F FE 0F FE 0F FE 0E 0E 0E 0E 0E 0E 1C 1E",
  245.     {4, 10}
  246. };
  247.  
  248. resource 'CURS' (rACursor2, preload, nonPurgeable) {
  249.     $"30 30 28 38 24 24 13 AC 0B C6 04 0C 02 36 02 36"
  250.     $"02 E0 02 E0 0E E0 10 60 26 20 29 90 28 50 30 38",
  251.     $"30 30 38 38 3C 3C 1F BC 0F FE 07 FC 03 F6 03 F6"
  252.     $"03 E0 03 E0 0F E0 1F E0 3F E0 39 F0 38 70 30 38",
  253.     {15, 7}
  254. };
  255.  
  256. resource 'CURS' (rACursor3, preload, nonPurgeable) {
  257.     $"00 00 06 C0 0A A0 12 90 14 58 17 D8 20 18 27 18"
  258.     $"4F 18 9F CF E0 C3 80 2A 00 FC 00 D0",
  259.     $"00 00 06 C0 0E E0 1E F0 1C 78 1F F8 3F F8 3F F8"
  260.     $"7F F8 FF FF E0 FF 80 3E 00 FC 00 D0",
  261.     {9, 6}
  262. };
  263.  
  264. resource 'CURS' (rACursor4, preload, nonPurgeable) {
  265.     $"0E 06 05 0A 04 CA 02 32 03 04 03 B8 03 A0 03 A0"
  266.     $"36 20 36 20 18 10 31 E8 1A E4 12 12 0E 0A 06 06",
  267.     $"0E 06 07 0E 07 CE 03 FE 03 FC 03 F8 03 E0 03 E0"
  268.     $"37 E0 37 E0 1F F0 3F F8 1E FC 1E 1E 0E 0E 06 06",
  269.     {6, 6}
  270. };
  271.  
  272. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  273.  This is the cursor used when the cursor is over a sound document window. */
  274.  
  275. resource 'CURS' (rSndCursor, preload, nonPurgeable) {
  276.     $"03 80 04 C0 04 C0 04 C0 04 C0 04 C0 74 F8 9C AE"
  277.     $"4C AB 24 0B 24 03 10 03 08 03 08 06 04 06 04 06",
  278.     $"03 80 07 C0 07 C0 07 C0 07 C0 07 C0 77 F8 FF FE"
  279.     $"7F FF 3F FF 3F FF 1F FF 0F FF 0F FE 07 FE 07 FE",
  280.     {0, 7}
  281. };
  282.  
  283. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  284.  These are the resources used to create the bungle package used by the Finder.
  285.  I use type coerson to create my signature string.  Many of these resources
  286.  have to do with the new Finder for System 7.0 and the desktop display, such
  287.  as the use of color icons. */
  288.  
  289. type rAppSignature as 'STR ';
  290.  
  291. resource rAppSignature (0, "Owner resource", purgeable) {
  292.     "SoundApp"
  293. };
  294.  
  295. resource 'BNDL' (rAppBundle, purgeable) {
  296.     rAppSignature, 0,
  297.     {
  298.         'ICN#', {0, rMoofIcon, 1, rSndDocIcon},
  299.         'FREF', {0, rMoofIcon, 1, rSndDocIcon},
  300.     }
  301. };
  302.  
  303. resource 'FREF' (rAppBundle, purgeable) {
  304.     'APPL', 0, ""
  305. };
  306.  
  307. resource 'FREF' (rSndDocIcon, purgeable) {
  308.     rSndAppDocType, 1, ""
  309. };
  310.  
  311. resource 'ICN#' (rMoofIcon, purgeable) {
  312.     {
  313. /* [1] */
  314.         $"0430 4000 0A50 A000 0B91 1002 0822 0803"
  315.         $"1224 0405 2028 0209 4010 0111 800C 00A1"
  316.         $"8003 FFC2 7E00 FF04 0100 7F04 0300 1E08"
  317.         $"04E0 000C 08E0 000A 10E0 0009 08C0 0006"
  318.         $"0487 FE04 0288 0104 0188 0084 0088 0044"
  319.         $"0088 0044 0088 00C4 0110 0188 0228 0310"
  320.         $"01C4 04E0 0002 0800 73BF FBEE 4CA2 8A2A"
  321.         $"40AA AAEA 52AA AA24 5EA2 8AEA 73BE FB8E",
  322. /* [2] */
  323.         $"0430 4000 0E70 E000 0FF1 F002 0FE3 F803"
  324.         $"1FE7 FC07 3FEF FE0F 7FFF FF1F FFFF FFBF"
  325.         $"FFFF FFFE 7FFF FFFC 01FF FFFC 03FF FFF8"
  326.         $"07FF FFFC 0FFF FFFE 1FFF FFFF 0FFF FFFE"
  327.         $"07FF FFFC 03FF FFFC 01FF FFFC 00FF FFFC"
  328.         $"00FF FFFC 00FF FFFC 01FF FFF8 03EF FFF0"
  329.         $"01C7 FCE0 0003 F800 73BF FBEE 7FBE FBEE"
  330.         $"7FBE FBEE 7FBE FBE4 7FBE FBEE 73BE FB8E"
  331.     }
  332. };
  333.  
  334. resource 'ICN#' (rSndDocIcon, purgeable) {
  335.     {
  336. /* [1] */
  337.         $"0000 0000 0000 0000 7FFF FFC0 4000 0060"
  338.         $"4000 0050 4E97 0048 48D4 807C 4EB4 8004"
  339.         $"4294 8004 4E97 0004 4000 0004 4000 0004"
  340.         $"4001 8204 4003 8104 4006 8884 400C 8444"
  341.         $"4018 8244 4030 9244 4FE0 9224 4800 8924"
  342.         $"4800 8924 4800 8924 4FE0 8924 4FF0 9224"
  343.         $"4038 9244 401C 8244 400E 8444 4007 8884"
  344.         $"4003 8104 4001 8204 4000 0004 7FFF FFFC",
  345. /* [2] */
  346.         $"0000 0000 0000 0000 7FFF FFC0 7FFF FFE0"
  347.         $"7FFF FFF0 7FFF FFF8 7FFF FFFC 7FFF FFFC"
  348.         $"7FFF FFFC 7FFF FFFC 7FFF FFFC 7FFF FFFC"
  349.         $"7FFF FFFC 7FFF FFFC 7FFF FFFC 7FFF FFFC"
  350.         $"7FFF FFFC 7FFF FFFC 7FFF FFFC 7FFF FFFC"
  351.         $"7FFF FFFC 7FFF FFFC 7FFF FFFC 7FFF FFFC"
  352.         $"7FFF FFFC 7FFF FFFC 7FFF FFFC 7FFF FFFC"
  353.         $"7FFF FFFC 7FFF FFFC 7FFF FFFC 7FFF FFFC"
  354.     }
  355. };
  356.  
  357. resource 'icl4' (rMoofIcon, purgeable) {
  358.     $"0000 0F00 00FF 0000 0F00 0000 0000 0000"
  359.     $"0000 F0F0 0F0F 0000 F8F0 0000 0000 0000"
  360.     $"0000 F0FF F00F 000F 888F 0000 0000 00F0"
  361.     $"0000 F000 00F0 00F8 8888 F000 0000 00FF"
  362.     $"000F 00F0 00F0 0F88 8888 8F00 0000 0F0F"
  363.     $"00F0 0000 00F0 F888 8888 88F0 0000 F00F"
  364.     $"0F00 0000 000F 8888 8888 888F 000F 000F"
  365.     $"F000 0000 0000 FF88 8888 8888 F0F0 000F"
  366.     $"F000 0000 0000 00FF FFFF FFFF FF00 00F0"
  367.     $"0FFF FFF0 0000 0000 FFFF FFFF 0000 0F00"
  368.     $"0000 000F 0000 0000 0FFF FFFF 0000 0F00"
  369.     $"0000 00FF 0000 0000 000F FFF0 0000 F000"
  370.     $"0000 0F88 FFF0 0000 0000 0000 0000 FF00"
  371.     $"0000 F888 FFF0 0000 0000 0000 0000 F8F0"
  372.     $"000F 8888 FFF0 0000 0000 0000 0000 F88F"
  373.     $"0000 F888 FF00 0000 0000 0000 0000 0FF0"
  374.     $"0000 0F88 F000 0FFF FFFF FFF0 0000 0F00"
  375.     $"0000 00F8 F000 F888 8888 888F 0000 0F00"
  376.     $"0000 000F F000 F888 8888 8888 F000 0F00"
  377.     $"0000 0000 F000 F888 8888 8888 8F00 0F00"
  378.     $"0000 0000 F000 F888 8888 8888 8F00 0F00"
  379.     $"0000 0000 F000 F888 8888 8888 FF00 0F00"
  380.     $"0000 000F 000F 8888 8888 888F F000 F000"
  381.     $"0000 00F0 00F0 F888 8888 88FF 000F 0000"
  382.     $"0000 000F FF00 0F88 8888 8F00 FFF0 0000"
  383.     $"0000 0000 0000 00F8 8888 F000 0000 0000"
  384.     $"0FFF 00FF F0FF FFFF FFFF F0FF FFF0 FFF0"
  385.     $"0F33 FF33 F0F3 33F0 F333 F0F3 33F0 F3F0"
  386.     $"0F33 3333 F0F3 F3F0 F3F3 F0F3 FFF0 F3F0"
  387.     $"0F3F 33F3 F0F3 F3F0 F3F3 F0F3 33F0 0F00"
  388.     $"0F3F FFF3 F0F3 33F0 F333 F0F3 FFF0 F3F0"
  389.     $"0FFF 00FF F0FF FFF0 FFFF F0FF F000 FFF0"
  390. };
  391.  
  392. resource 'icl4' (rSndDocIcon, purgeable) {
  393.     $"0000 0000 0000 0000 0000 0000 0000 0000"
  394.     $"0000 0000 0000 0000 0000 0000 0000 0000"
  395.     $"0FFF FFFF FFFF FFFF FFFF FFFF FF00 0000"
  396.     $"0F00 0000 0000 0000 0000 0000 0FD0 0000"
  397.     $"0F00 0000 0000 0000 0000 0000 0FDD 0000"
  398.     $"0F00 FFF0 F00F 0FFF 0000 0000 0FDD D000"
  399.     $"0F00 F000 FF0F 0F00 F000 0000 0FFF FF00"
  400.     $"0F00 FFF0 F0FF 0F00 F000 0000 0000 0F00"
  401.     $"0F00 00F0 F00F 0F00 F000 0000 0000 0F00"
  402.     $"0F00 FFF0 F00F 0FFF 0000 0000 0000 0F00"
  403.     $"0F00 0000 0000 0000 0000 0000 0000 0F00"
  404.     $"0F00 0000 0000 0000 D000 0000 0000 0F00"
  405.     $"0F00 0000 0000 000F E000 00F0 0000 0F00"
  406.     $"0F00 0000 0000 00FE E000 000F 0000 0F00"
  407.     $"0F00 0000 0000 0FED C000 F000 F000 0F00"
  408.     $"0F00 0000 0000 FEDC C000 0F00 0F00 0F00"
  409.     $"0F00 0000 000F EDC0 C000 00F0 0F00 0F00"
  410.     $"0F00 0000 00FE DC00 D00F 00F0 0F00 0F00"
  411.     $"0F00 EFFF FFED C0CC D00F 00F0 00F0 0F00"
  412.     $"0F00 EDDD DDCC CCCC E000 F00F 00F0 0F00"
  413.     $"0F00 D000 00C0 CCCC E000 F00F 00F0 0F00"
  414.     $"0F00 ECCC CCDC CCCC E000 F00F 00F0 0F00"
  415.     $"0F00 FEEE EEEE DDDD E000 F00F 00F0 0F00"
  416.     $"0F00 FFFF FFEE EDDD F00F 00F0 00F0 0F00"
  417.     $"0F00 0000 00FE EEDD E00F 00F0 0F00 0F00"
  418.     $"0F00 0000 000F FEED F000 00F0 0F00 0F00"
  419.     $"0F00 0000 0000 FEEE E000 0F00 0F00 0F00"
  420.     $"0F00 0000 0000 0FFE F000 F000 F000 0F00"
  421.     $"0F00 0000 0000 00FE F000 000F 0000 0F00"
  422.     $"0F00 0000 0000 000F F000 00F0 0000 0F00"
  423.     $"0F00 0000 0000 0000 D000 0000 0000 0F00"
  424.     $"0FFF FFFF FFFF FFFF FFFF FFFF FFFF FF"
  425. };
  426.  
  427. resource 'ics4' (rMoofIcon, purgeable) {
  428.     $"00F0 0F00 FF00 0000 00F0 FF0F 88F0 000F"
  429.     $"0F0F 0FF8 888F 00FF F000 0FF8 8888 FF0F"
  430.     $"FFFF 000F FFFF F0FF 000F 0000 FFFF 00F0"
  431.     $"00F8 FF00 0000 00F0 0F88 FF00 0000 00FF"
  432.     $"00F8 F0FF FFFF 00F0 000F F0F8 8888 F0F0"
  433.     $"0000 F0F8 8888 F0F0 000F 0FF8 888F F0F0"
  434.     $"000F F00F 88F0 FF00 0000 0000 FF"
  435. };
  436.  
  437. resource 'ics4' (rSndDocIcon, purgeable) {
  438.     $"0000 0000 0000 0000 FFFF FFFF FFFF FF00"
  439.     $"F000 0000 0000 0FF0 F000 0000 0000 0FFF"
  440.     $"F000 0000 F000 000F F000 000F E00F 000F"
  441.     $"F000 00FE E000 F00F F000 0FED D0F0 0F0F"
  442.     $"F0FF FED0 D00F 0F0F F0FC CCCC D00F 0F0F"
  443.     $"F0FE EDDD D00F 0F0F F0FF FEDD E0F0 0F0F"
  444.     $"F000 0FEE E000 F00F F000 00FE E00F 000F"
  445.     $"F000 000F F000 000F FFFF FFFF FFFF FFFF"
  446. };
  447.  
  448. resource 'ics#' (rMoofIcon, purgeable) {
  449.     {
  450. /* [1] */
  451.         $"24C0 2D21 5613 860D F1FB 10F2 2C02 4C03"
  452.         $"2BF2 1A0A 0A0A 161A 192C 00C0",
  453. /* [2] */
  454.         $"24C0 2DE1 7FF3 FFFF FFFF 1FFE 3FFE 7FFF"
  455.         $"3FFE 1FFE 0FFE 1FFE 19EC 00C0"
  456.     }
  457. };
  458.  
  459. resource 'ics#' (rSndDocIcon, purgeable) {
  460.     {
  461. /* [1] */
  462.         $"0000 FFFC 8006 8007 8081 8191 8289 84A5"
  463.         $"B895 A095 B895 BCA5 8689 8391 8181 FFFF",
  464. /* [2] */
  465.         $"0000 FFFC FFFE FFFF FFFF FFFF FFFF FFFF"
  466.         $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"
  467.     }
  468. };
  469.  
  470. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  471.  These are the resources used for an emergency exit alert. */
  472.  
  473. resource 'ALRT' (rExitAlert, purgeable) {
  474.     {0, 0, kExitAlertSizeH, kExitAlertSizeW}, rExitAlert,
  475.     {
  476. /* [1] */ OK, visible, silent,
  477. /* [2] */ OK, visible, silent,
  478. /* [3] */ OK, visible, silent,
  479. /* [4] */ OK, visible, silent
  480.     }
  481. };
  482.  
  483. resource 'DITL' (rExitAlert, purgeable) {
  484.     {
  485. /* [1] */    {
  486.                 (kExitAlertSizeH - kDafaultButSizeH),                                        /* top */
  487.                  ((kExitAlertSizeW - kDafaultButSizeW) / 2),                                /* left */
  488.                  (kExitAlertSizeH - kDafaultButSizeH + kButtonSizeH),                    /* bottom */
  489.                 (((kExitAlertSizeW - kDafaultButSizeW) / 2) + kDafaultButSizeW)    /* right */
  490.                 }, Button {enabled, "OK"},
  491. /* [2] */    kStdAlertIconRect, Icon {disabled, rCautionIcon},
  492. /* [3] */    {8, 72, 40, 240}, StaticText {disabled,
  493.                 "Sorry, an unrecoverable error has occurred!"},
  494. /* [4] */    {48, 8, 96, 240}, StaticText {disabled, "^0"}
  495.     }
  496. };
  497.  
  498. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  499.  These are the resources used to display error messages to the user. */
  500.  
  501. resource 'ALRT' (rUserAlert, purgeable) {
  502.     {0, 0, kUserAlertSizeH, kUserAlertSizeW}, rUserAlert,
  503.     {
  504. /* [1] */ OK, visible, silent,
  505. /* [2] */ OK, visible, silent,
  506. /* [3] */ OK, visible, silent,
  507. /* [4] */ OK, visible, silent
  508.     }
  509. };
  510.  
  511. resource 'DITL' (rUserAlert, purgeable) {
  512.     {
  513. /* [1] */    {
  514.                 (kUserAlertSizeH - kDafaultButSizeH),                                        /* top */
  515.                  ((kUserAlertSizeW - kDafaultButSizeW) / 2),                                /* left */
  516.                  (kUserAlertSizeH - kDafaultButSizeH + kButtonSizeH),                    /* bottom */
  517.                 (((kUserAlertSizeW - kDafaultButSizeW) / 2) + kDafaultButSizeW)    /* right */
  518.                 }, Button {enabled, "OK"},
  519. /* [2] */    {8, 72, 88, 296}, StaticText {disabled, "^0\n(error = ^1)"},
  520. /* [3] */    kStdAlertIconRect, Icon {disabled, rCautionIcon}
  521.     }
  522. };
  523.  
  524. /* These are the strings used for error messages. */
  525. resource 'STR#' (sErrStrings, purgeable) {
  526.     {
  527.     "An error has occurred.";
  528.     "A Memory Manager error has occurred.";
  529.     "A Resource Manager error has occurred.";
  530.     "That file is currently open and cannot be used.";
  531.     "The wave table synthesizer is not available.";
  532.     "This system does not support the Sound Manager; use System 6.0.2 or later.";
  533.     "Memory is too low to continue.  Try closing a window or increasing the SIZE resource.";
  534.     "Could not find application’s menu resources.";
  535.     "Could not initialize the Sound unit.";
  536.     "The Sound Manager has encountered an error.";
  537.     "Could not create a new document.";
  538.     "Error initializing the status window.";
  539.     "Could not complete the edit command.";
  540.     "There is a problem with this document.";
  541.     }
  542. };
  543.  
  544. /* These are a set of strings used to report Sound Manager errors.  Instead of
  545.  the error number, one of these strings will be used.  These are only the set
  546.  of Sound Manager errors.  The equation to be used to include additional strings
  547.  is the Sound Manager ABS(error) + noHardware) + 1.  200 is the first Sound Manager
  548.  error number and 1 is the index, since GetIndString is 1 based. */
  549.  
  550. resource 'STR#' (sSMErrStrings, purgeable) {
  551.     {
  552.     "no hardware available";                        /* noHardware -200 */
  553.     "not enough hardware available";                /* notEnoughHardware -201 */
  554.     "";                                                    /* not used -202 */
  555.     "sound channel queue is full";                /* queueFull -203 */
  556.     "problem with resource";                        /* resProblem -204 */
  557.     "bad sound channel";                                /* badChannel -205 */
  558.     "bad sound format";                                /* badFormat -206 */
  559.     "could not allocate enough memory";            /* notEnoughBufferSpace -207 */
  560.     "was not type AIFF or was of bad format";    /* badFileFormat -208 */
  561.     "the Channel is being used";                    /* channelBusy -209 */
  562.     "can not operate in the memory allowed";    /* buffersTooSmall -210 */
  563.     "the channel is not busy";                        /* channelNotBusy -211 */
  564.     "not enought CPU cycles left";                /* noMoreRealTime -212 */
  565.     "";                                                    /* not used -213 */
  566.     "";                                                    /* not used -214 */
  567.     "";                                                    /* not used -215 */
  568.     "";                                                    /* not used -216 */
  569.     "";                                                    /* not used -217 */
  570.     "";                                                    /* not used -218 */
  571.     "";                                                    /* not used -219 */
  572.     "sound input hardware not available";        /* siNoSoundInHardware -220 */
  573.     "invalid index";                                     /* siBadSoundInDevice -221 */
  574.     "nil buffer passed";                             /* siNoBufferSpecified -222 */
  575.     "invalid compression type";                    /* siInvalidCompression -223 */
  576.     "hard drive too slow to record to disk";    /* siHardDriveTooSlow -224 */
  577.     "invalid sample rate";                            /* siInvalidSampleRate -225 */
  578.     "invalid sample size";                            /* siInvalidSampleSize -226 */
  579.     "input device already in use";                /* siDeviceBusyErr -227 */
  580.     "input device could not be opened";            /* siBadDeviceName -228 */
  581.     "invalid input device reference number";    /* siBadRefNum -229 */
  582.     "input device hardware failure";                /* siInputDeviceErr -230 */
  583.     "invalid info type selector";                    /* siUnknownInfoType -231 */
  584.     "invalid quality selector";                    /* siUnknownQuality -232 */
  585.     }
  586. };
  587.  
  588. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  589.  These are the resources used to tell the user about the sound volume. */
  590.  
  591. resource 'ALRT' (rSoundVol, purgeable) {
  592.     {0, 0, kSoundVolSizeH, kSoundVolSizeW}, rSoundVol,
  593.     {
  594. /* [1] */ OK, visible, sound1,
  595. /* [2] */ OK, visible, sound1,
  596. /* [3] */ OK, visible, sound1,
  597. /* [4] */ OK, visible, sound1
  598.     }
  599. };
  600.  
  601. resource 'DITL' (rSoundVol, purgeable) {
  602.     {
  603. /* [1] */    {
  604.                 (kSoundVolSizeH - kDafaultButSizeH),                                        /* top */
  605.                 ((kSoundVolSizeW - kDafaultButSizeW) / 2),                                /* left */
  606.                 (kSoundVolSizeH - kDafaultButSizeH + kButtonSizeH),                    /* bottom */
  607.                 (((kSoundVolSizeW - kDafaultButSizeW) / 2) + kDafaultButSizeW)        /* right */
  608.                 }, Button {enabled, "OK"},
  609. /* [2] */    {8, 72, 56, 232}, StaticText {disabled,
  610.                 "The sound volume is ^0.  Use the Control Panel if you wish to adjust this."},
  611. /* [3] */    kStdAlertIconRect, Icon {disabled, rNoteIcon}
  612.     }
  613. };
  614.  
  615.  
  616. /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  617.  These are the resources for my custom Standard File dialog. */
  618.  
  619. resource 'DLOG' (rGetNameDLOG, purgeable) {
  620.     {40, 40, 152, 234}, dBoxProc, visible, noGoAway, 0x0, rGetNameDLOG, ""
  621. };
  622.  
  623. resource 'DITL' (rGetNameDLOG, purgeable) {
  624.     {
  625. /* [1] */    {80, 14, (80 + kButtonSizeH), (14 + kButtonSizeW)}, Button {enabled, "OK"},
  626. /* [2] */    {80, 112, (80 + kButtonSizeH), (112 + kButtonSizeW)}, Button {enabled, "Cancel"},
  627. /* [3] */    {40, 12, 58, 184}, EditText {enabled, ""},
  628. /* [4] */    {8, 8, 28, 192}, StaticText {disabled, "Please name this sound."},
  629. /* [5] */    {0, 0, 0, 0}, UserItem {disabled},
  630.     }
  631. };
  632.  
  633.  
  634. /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  635.  These are the resources for my custom Standard File dialog. */
  636.  
  637. resource 'DLOG' (rSFPGetFileDLOG, purgeable) {
  638.     {0, 0, 224, 348}, dBoxProc, invisible, noGoAway, 0x0, rSFPGetFileDLOG, ""
  639. };
  640.  
  641. resource 'DITL' (rSFPGetFileDLOG, purgeable) {
  642.     {
  643. /* [1] */    {138, 256, 156, 336}, Button {enabled, "Open"},
  644. /* [2] */    {1152, 59, 1232, 77}, Button {enabled, ""},
  645. /* [3] */    {163, 256, 181, 336}, Button {enabled, "Cancel"},
  646. /* [4] */    {39, 232, 59, 347}, UserItem {disabled},
  647. /* [5] */    {68, 256, 86, 336}, Button {enabled, "Eject"},
  648. /* [6] */    {93, 256, 111, 336}, Button {enabled, "Drive"},
  649. /* [7] */    {39, 12, 185, 230}, UserItem {enabled},
  650. /* [8] */    {39, 229, 185, 246}, UserItem {enabled},
  651. /* [9] */    {124, 252, 125, 340}, UserItem {disabled},
  652. /* [10] */    {1044, 20, 1145, 116},StaticText {disabled, ""},
  653. /* [11] */    {192, 16, 216, 288}, CheckBox {enabled, "Show only files with sound resources"}
  654.     }
  655. };
  656.  
  657. /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  658.  We use an MBAR resource to conveniently load all the menus */
  659.  
  660. resource 'MBAR' (rMenuBar, preload) {
  661.     {mApple, mFile, mEdit, mDemos};
  662. };
  663.  
  664. resource 'MENU' (mApple, preload) { /* Disable dashed line, enable About and DAs */
  665.     mApple, textMenuProc, (AllItems & ~MenuItem2), enabled, apple,
  666.     {
  667.         "About SoundApp…", noicon, nokey, nomark, plain;
  668.         "-", noicon, nokey, nomark, plain
  669.     }
  670. };
  671.  
  672. resource 'MENU' (mFile, preload) { /* enable Quit and Open only, program enables others */
  673.     mFile, textMenuProc, (NoItems | MenuItem1 | MenuItem2 | MenuItem12), enabled, "File",
  674.     {
  675.         "New", noicon, "N", nomark, plain;
  676.         "Open…", noicon, "O", nomark, plain;
  677.         "-", noicon, nokey, nomark, plain;
  678.         "Close", noicon, "W", nomark, plain;
  679.         "Save", noicon, "S", nomark, plain;
  680.         "Save As…", noicon, nokey, nomark, plain;
  681.         "Revert", noicon, nokey, nomark, plain;
  682.         "-", noicon, nokey, nomark, plain;
  683.         "Page Setup…", noicon, nokey, nomark, plain;
  684.         "Print…", noicon, nokey, nomark, plain;
  685.         "-", noicon, nokey, nomark, plain;
  686.         "Quit", noicon, "Q", nomark, plain
  687.     }
  688. };
  689.  
  690. resource 'MENU' (mEdit, preload) { /* disable everything, program does the enabling */
  691.     mEdit, textMenuProc, NoItems, enabled, "Edit",
  692.      {
  693.         "Undo", noicon, "Z", nomark, plain;
  694.         "-", noicon, nokey, nomark, plain;
  695.         "Cut", noicon, "X", nomark, plain;
  696.         "Copy", noicon, "C", nomark, plain;
  697.         "Paste", noicon, "V", nomark, plain;
  698.         "Clear", noicon, "B", nomark, plain
  699.     }
  700. };
  701.  
  702. resource 'MENU' (mDemos, preload) { /* enable everything except the dashed lines */
  703.     mDemos, textMenuProc, (AllItems & ~MenuItem4), enabled, "Demos",
  704.      {
  705.         "SquareWave Snth Scale", noicon, nokey, nomark, plain;
  706.         "SquareWave Snth Melody", noicon, nokey, nomark, plain;
  707.         "SquareWave Snth Timbres", noicon, nokey, nomark, plain;
  708.         "-", noicon, nokey, nomark, plain;
  709.         "Wave Snth Scale", noicon, nokey, nomark, plain;
  710.         "Wave Snth Melody", noicon, nokey, nomark, plain;
  711.         "Wave Snth Counterpoint", noicon, nokey, nomark, plain
  712.     }
  713. };
  714.  
  715. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  716.  The quintessential MultiFinder friendliness device, the SIZE resource */
  717.  
  718. resource 'SIZE' (-1, purgeable) {
  719.     dontSaveScreen,
  720.     acceptSuspendResumeEvents,
  721.     enableOptionSwitch,
  722.     canBackground,                    /* we can background, but we don’t */
  723.     multiFinderAware,                /* we do our own activate/deactivate */
  724.     backgroundAndForeground,    /* this is not a background-only application! */
  725.     dontGetFrontClicks,            /* standard, don’t want front clicks */
  726.     ignoreChildDiedEvents,        /* I’m not a debugger and I don’t sub-launch */
  727.     is32BitCompatible,            /* this is a 32 bit clean application */
  728.     reserved, reserved, reserved, reserved,
  729.     reserved, reserved, reserved,
  730.     kPrefSize * 1024,
  731.     kMinSize * 1024
  732. };
  733.  
  734. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  735.  This is the prompt string that appears in the SFPutFile dialog. */\
  736.  
  737. resource 'STR ' (rPutFileMsg, purgeable) {
  738.     "Create a new file named…"
  739. };
  740.  
  741. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  742.  These are the resources used for the application’s about window.
  743.  The ICON is copied from the bundle resource’s ICN#.  The cicn is also
  744.  based on that. */
  745.  
  746. resource 'WIND' (rAboutWindow, purgeable) {
  747.     {0, 0, kAboutWindowSizeH, kAboutWindowSizeW}, altDBoxProc, visible, noGoAway, 0x0, ""
  748. };
  749.  
  750. resource 'CNTL' (rAboutOKCntl, purgeable) {
  751.     {
  752.     (kAboutWindowSizeH - kDafaultButSizeH),                                        /* top */
  753.     ((kAboutWindowSizeW - kDafaultButSizeW) / 2),                                /* left */
  754.     (kAboutWindowSizeH - kDafaultButSizeH + kButtonSizeH),                    /* bottom */
  755.     (((kAboutWindowSizeW - kDafaultButSizeW) / 2) + kDafaultButSizeW)        /* right */
  756.     }, 0, visible, 0, 0, pushButProc, 0, "OK"
  757. };
  758.  
  759. resource 'STR ' (rAboutText, purgeable) {
  760.     "“^0” version ^1\n"
  761.     "A sample application using the Sound Manager.\n\n"
  762.     "Brought to you by Jim Reekes\n"
  763.     "Macintosh Developer Technical Support\n"
  764.     "Copyright © 1989-91 Apple Computer\n\n"
  765.     "We’d go Moof!™ for you, but Vince won’t let us."
  766. };
  767.  
  768. resource 'ICON' (rMoofIcon, purgeable) {
  769.     $"0430 4000 0A50 A000 0B91 1002 0822 0803"
  770.     $"1224 0405 2028 0209 4010 0111 800C 00A1"
  771.     $"8003 FFC2 7E00 FF04 0100 7F04 0300 1E08"
  772.     $"04E0 000C 08E0 000A 10E0 0009 08C0 0006"
  773.     $"0487 FE04 0288 0104 0188 0084 0088 0044"
  774.     $"0088 0044 0088 00C4 0110 0188 0228 0310"
  775.     $"01C4 04E0 0002 0800 73BF FBEE 4CA2 8A2A"
  776.     $"40AA AAEA 52AA AA24 5EA2 8AEA 73BE FB8E"
  777. };
  778.  
  779. data 'cicn' (rMoofIcon, purgeable) {
  780.     $"0000 0000 8008 0000 0000 0020 0020 0000"
  781.     $"0000 0000 0000 0048 0000 0048 0000 0000"
  782.     $"0002 0001 0002 0000 0000 0000 0000 0000"
  783.     $"0000 0000 0000 0004 0000 0000 0020 0020"
  784.     $"0000 0000 0004 0000 0000 0020 0020 0000"
  785.     $"0000 0430 4000 0E70 E000 0FF1 F002 0FE3"
  786.     $"F803 1FE7 FC07 3FEF FE0F 7FFF FF1F FFFF"
  787.     $"FFBF FFFF FFFE 7FFF FFFC 01FF FFFC 03FF"
  788.     $"FFF8 07FF FFFC 0FFF FFFE 1FFF FFFF 0FFF"
  789.     $"FFFE 07FF FFFC 03FF FFFC 01FF FFFC 00FF"
  790.     $"FFFC 00FF FFFC 00FF FFFC 01FF FFF8 03EF"
  791.     $"FFF0 01C7 FCE0 0003 F800 73BF FBEE 7FBE"
  792.     $"FBEE 7FBE FBEE 7FBE FBE4 7FBE FBEE 73BE"
  793.     $"FB8E 0430 4000 0A50 A000 0B91 1002 0822"
  794.     $"0803 1224 0405 2028 0209 4010 0111 800C"
  795.     $"00A1 8003 FFC2 7E00 FF04 0100 7F04 0300"
  796.     $"1E08 04E0 000C 08E0 000A 10E0 0009 08C0"
  797.     $"0006 0487 FE04 0288 0104 0188 0084 0088"
  798.     $"0044 0088 0044 0088 00C4 0110 0188 0228"
  799.     $"0310 01C4 04E0 0002 0800 73BF FBEE 4CA2"
  800.     $"8A2A 40AA AAEA 52AA AA24 5EA2 8AEA 73BE"
  801.     $"FB8E 0000 0000 0000 0003 0000 FFFF FFFF"
  802.     $"FFFF 0001 DD6B 08C2 06A2 0002 1F21 B793"
  803.     $"1431 0003 0000 0000 0000 0030 0F00 3000"
  804.     $"0000 00CC 3300 EC00 0000 00CF C303 AB00"
  805.     $"000C 00C0 0C0E AAC0 000F 030C 0C3A AAB0"
  806.     $"0033 0C00 0CEA AAAC 00C3 3000 03AA AAAB"
  807.     $"0303 C000 00FA AAAA CC03 C000 000F FFFF"
  808.     $"F00C 3FFC 0000 FFFF 0030 0003 0000 3FFF"
  809.     $"0030 000F 0000 03FC 00C0 003A FC00 0000"
  810.     $"00F0 00EA FC00 0000 00EC 03AA FC00 0000"
  811.     $"00EB 00EA F000 0000 003C 003A C03F FFFC"
  812.     $"0030 000E C0EA AAAB 0030 0003 C0EA AAAA"
  813.     $"C030 0000 C0EA AAAA B030 0000 C0EA AAAA"
  814.     $"B030 0000 C0EA AAAA F030 0003 03AA AAAB"
  815.     $"C0C0 000C 0CEA AAAF 0300 0003 F03A AAB0"
  816.     $"FC00 0000 000E AAC0 0000 3F0F CFFF FFCF"
  817.     $"FCFC 35F5 CD5C D5CD 5CDC 3555 CDDC DDCD"
  818.     $"FCDC 375D CDDC DDCD 5C30 37FD CD5C D5CD"
  819.     $"FCDC 3F0F CFFC FFCF C0FC"
  820. };
  821.  
  822. resource 'PICT' (rAppPict, purgeable) {
  823.     3396, {110, 108, 151, 350},
  824.     $"0011 02FF 0C00 FFFF FFFF 006C 0000 006E 0000 015E 0000 0097 0000 0000 0000 001E"
  825.     $"0001 000A 006E 006C 0097 015E 0099 80FA 006E 006C 0097 0165 0000 0000 0000 0000"
  826.     $"0048 0000 0048 0000 0000 0008 0001 0008 0000 0000 0000 1F10 0000 0000 0000 0791"
  827.     $"8000 00FF 0800 FFFF FFFF FFFF 0800 FFFF FFFF CCCC 0800 FFFF FFFF 9999 0800 FFFF"
  828.     $"FFFF 6666 0800 FFFF FFFF 3333 0800 FFFF FFFF 0000 0800 FFFF CCCC FFFF 0800 FFFF"
  829.     $"CCCC CCCC 0800 FFFF CCCC 9999 0800 FFFF CCCC 6666 0800 FFFF CCCC 3333 0800 FFFF"
  830.     $"CCCC 0000 0800 FFFF 9999 FFFF 0800 FFFF 9999 CCCC 0800 FFFF 9999 9999 0800 FFFF"
  831.     $"9999 6666 0800 FFFF 9999 3333 0800 FFFF 9999 0000 0800 FFFF 6666 FFFF 0800 FFFF"
  832.     $"6666 CCCC 0800 FFFF 6666 9999 0800 FFFF 6666 6666 0800 FFFF 6666 3333 0800 FFFF"
  833.     $"6666 0000 0800 FFFF 3333 FFFF 0800 FFFF 3333 CCCC 0800 FFFF 3333 9999 0800 FFFF"
  834.     $"3333 6666 0800 FFFF 3333 3333 0800 FFFF 3333 0000 0800 FFFF 0000 FFFF 0800 FFFF"
  835.     $"0000 CCCC 0800 FFFF 0000 9999 0800 FFFF 0000 6666 0800 FFFF 0000 3333 0800 FFFF"
  836.     $"0000 0000 0800 CCCC FFFF FFFF 0800 CCCC FFFF CCCC 0800 CCCC FFFF 9999 0800 CCCC"
  837.     $"FFFF 6666 0800 CCCC FFFF 3333 0800 CCCC FFFF 0000 0800 CCCC CCCC FFFF 0800 CCCC"
  838.     $"CCCC CCCC 0800 CCCC CCCC 9999 0800 CCCC CCCC 6666 0800 CCCC CCCC 3333 0800 CCCC"
  839.     $"CCCC 0000 0800 CCCC 9999 FFFF 0800 CCCC 9999 CCCC 0800 CCCC 9999 9999 0800 CCCC"
  840.     $"9999 6666 0800 CCCC 9999 3333 0800 CCCC 9999 0000 0800 CCCC 6666 FFFF 0800 CCCC"
  841.     $"6666 CCCC 0800 CCCC 6666 9999 0800 CCCC 6666 6666 0800 CCCC 6666 3333 0800 CCCC"
  842.     $"6666 0000 0800 CCCC 3333 FFFF 0800 CCCC 3333 CCCC 0800 CCCC 3333 9999 0800 CCCC"
  843.     $"3333 6666 0800 CCCC 3333 3333 0800 CCCC 3333 0000 0800 CCCC 0000 FFFF 0800 CCCC"
  844.     $"0000 CCCC 0800 CCCC 0000 9999 0800 CCCC 0000 6666 0800 CCCC 0000 3333 0800 CCCC"
  845.     $"0000 0000 0800 9999 FFFF FFFF 0800 9999 FFFF CCCC 0800 9999 FFFF 9999 0800 9999"
  846.     $"FFFF 6666 0800 9999 FFFF 3333 0800 9999 FFFF 0000 0800 9999 CCCC FFFF 0800 9999"
  847.     $"CCCC CCCC 0800 9999 CCCC 9999 0800 9999 CCCC 6666 0800 9999 CCCC 3333 0800 9999"
  848.     $"CCCC 0000 0800 9999 9999 FFFF 0800 9999 9999 CCCC 0800 9999 9999 9999 0800 9999"
  849.     $"9999 6666 0800 9999 9999 3333 0800 9999 9999 0000 0800 9999 6666 FFFF 0800 9999"
  850.     $"6666 CCCC 0800 9999 6666 9999 0800 9999 6666 6666 0800 9999 6666 3333 0800 9999"
  851.     $"6666 0000 0800 9999 3333 FFFF 0800 9999 3333 CCCC 0800 9999 3333 9999 0800 9999"
  852.     $"3333 6666 0800 9999 3333 3333 0800 9999 3333 0000 0800 9999 0000 FFFF 0800 9999"
  853.     $"0000 CCCC 0800 9999 0000 9999 0800 9999 0000 6666 0800 9999 0000 3333 0800 9999"
  854.     $"0000 0000 0800 6666 FFFF FFFF 0800 6666 FFFF CCCC 0800 6666 FFFF 9999 0800 6666"
  855.     $"FFFF 6666 0800 6666 FFFF 3333 0800 6666 FFFF 0000 0800 6666 CCCC FFFF 0800 6666"
  856.     $"CCCC CCCC 0800 6666 CCCC 9999 0800 6666 CCCC 6666 0800 6666 CCCC 3333 0800 6666"
  857.     $"CCCC 0000 0800 6666 9999 FFFF 0800 6666 9999 CCCC 0800 6666 9999 9999 0800 6666"
  858.     $"9999 6666 0800 6666 9999 3333 0800 6666 9999 0000 0800 6666 6666 FFFF 0800 6666"
  859.     $"6666 CCCC 0800 6666 6666 9999 0800 6666 6666 6666 0800 6666 6666 3333 0800 6666"
  860.     $"6666 0000 0800 6666 3333 FFFF 0800 6666 3333 CCCC 0800 6666 3333 9999 0800 6666"
  861.     $"3333 6666 0800 6666 3333 3333 0800 6666 3333 0000 0800 6666 0000 FFFF 0800 6666"
  862.     $"0000 CCCC 0800 6666 0000 9999 0800 6666 0000 6666 0800 6666 0000 3333 0800 6666"
  863.     $"0000 0000 0800 3333 FFFF FFFF 0800 3333 FFFF CCCC 0800 3333 FFFF 9999 0800 3333"
  864.     $"FFFF 6666 0800 3333 FFFF 3333 0800 3333 FFFF 0000 0800 3333 CCCC FFFF 0800 3333"
  865.     $"CCCC CCCC 0800 3333 CCCC 9999 0800 3333 CCCC 6666 0800 3333 CCCC 3333 0800 3333"
  866.     $"CCCC 0000 0800 3333 9999 FFFF 0800 3333 9999 CCCC 0800 3333 9999 9999 0800 3333"
  867.     $"9999 6666 0800 3333 9999 3333 0800 3333 9999 0000 0800 3333 6666 FFFF 0800 3333"
  868.     $"6666 CCCC 0800 3333 6666 9999 0800 3333 6666 6666 0800 3333 6666 3333 0800 3333"
  869.     $"6666 0000 0800 3333 3333 FFFF 0800 3333 3333 CCCC 0800 3333 3333 9999 0800 3333"
  870.     $"3333 6666 0800 3333 3333 3333 0800 3333 3333 0000 0800 3333 0000 FFFF 0800 3333"
  871.     $"0000 CCCC 0800 3333 0000 9999 0800 3333 0000 6666 0800 3333 0000 3333 0800 3333"
  872.     $"0000 0000 0800 0000 FFFF FFFF 0800 0000 FFFF CCCC 0800 0000 FFFF 9999 0800 0000"
  873.     $"FFFF 6666 0800 0000 FFFF 3333 0800 0000 FFFF 0000 0800 0000 CCCC FFFF 0800 0000"
  874.     $"CCCC CCCC 0800 0000 CCCC 9999 0800 0000 CCCC 6666 0800 0000 CCCC 3333 0800 0000"
  875.     $"CCCC 0000 0800 0000 9999 FFFF 0800 0000 9999 CCCC 0800 0000 9999 9999 0800 0000"
  876.     $"9999 6666 0800 0000 9999 3333 0800 0000 9999 0000 0800 0000 6666 FFFF 0800 0000"
  877.     $"6666 CCCC 0800 0000 6666 9999 0800 0000 6666 6666 0800 0000 6666 3333 0800 0000"
  878.     $"6666 0000 0800 0000 3333 FFFF 0800 0000 3333 CCCC 0800 0000 3333 9999 0800 0000"
  879.     $"3333 6666 0800 0000 3333 3333 0800 0000 3333 0000 0800 0000 0000 FFFF 0800 0000"
  880.     $"0000 CCCC 0800 0000 0000 9999 0800 0000 0000 6666 0800 0000 0000 3333 0800 EEEE"
  881.     $"0000 0000 0800 DDDD 0000 0000 0800 BBBB 0000 0000 0800 AAAA 0000 0000 0800 8888"
  882.     $"0000 0000 0800 7777 0000 0000 0800 5555 0000 0000 0800 4444 0000 0000 0800 2222"
  883.     $"0000 0000 0800 1111 0000 0000 0800 0000 EEEE 0000 0800 0000 DDDD 0000 0800 0000"
  884.     $"BBBB 0000 0800 0000 AAAA 0000 0800 0000 8888 0000 2000 AAAA AAAA AAAA 2000 DDDD"
  885.     $"DDDD DDDD 2000 0000 0000 1111 2000 0000 0000 4444 2000 0000 0000 7777 2000 0000"
  886.     $"0000 AAAA 2000 0000 0000 DDDD 2000 0000 1111 0000 2000 0000 4444 0000 2000 0003"
  887.     $"D0D7 0001 2000 1111 1111 1111 2000 2222 2222 2222 2000 4444 4444 4444 2000 5555"
  888.     $"5555 5555 2000 7777 7777 7777 2000 8888 8888 8888 2000 BBBB BBBB BBBB 2000 EEEE"
  889.     $"EEEE EEEE 2000 0000 0000 2222 2000 0000 0000 5555 2000 0000 0000 8888 2000 0000"
  890.     $"0000 BBBB 2000 0000 0000 EEEE 2000 0000 2222 0000 2000 0000 5555 0000 0800 0000"
  891.     $"0000 0000 006E 006C 0097 015E 006E 006C 0097 015E 0000 000A 006E 006C 0097 015E"
  892.     $"0481 0087 0004 8100 8700 0481 0087 0004 8100 8700 08F9 0081 FF9E FFF2 000C F900"
  893.     $"00FF 81EF A0EF 00FF F200 0CF9 0000 FF81 EFA0 EF00 FFF2 000C F900 00FF 81EF A0EF"
  894.     $"00FF F200 0FF9 0000 FF8B EF01 0000 98EF 00FF F200 17F9 0000 FFD5 EF01 0000 BBEF"
  895.     $"FD00 F1EF FE00 ABEF 00FF F200 16F9 0000 FFDD EFF8 00B9 EFFD 00F1 EFFE 00AC EF00"
  896.     $"FFF2 001A F900 00FF DEEF FD00 FEEF FE00 B9EF FD00 F1EF FD00 ADEF 00FF F200 1BF9"
  897.     $"0000 FFE0 EFFC 00FD EF01 0000 B8EF FD00 F1EF FC00 AEEF 00FF F200 36F9 0000 FFE1"
  898.     $"EFFC 00FD EFFE 00F7 EFFB 00F7 EFFD 00FE EFFC 00F7 EF02 0000 EFFC 00F5 EFF8 00F1"
  899.     $"EFFB 00F4 EFF9 00F5 EFF9 00D8 EF00 FFF2 0037 F900 00FF E3EF FB00 F2EF F700 F9EF"
  900.     $"FD00 FDEF FD00 F8EF F700 F7EF FD00 01EF EFFC 00F1 EFFB 00F5 EFF5 00F8 EFFD 0000"
  901.     $"EFFB 00DB EF00 FFF2 0047 F900 00FF E3EF FC00 F3EF FD00 FEEF FD00 F9EF FC00 FEEF"
  902.     $"FC00 F9EF FC00 01EF EFFC 00F9 EFFC 00FE EFFC 00F2 EF02 0000 EFFD 00F6 EFFD 00FD"
  903.     $"EFFD 00F9 EFFC 00FE EFFC 00DC EF00 FFF2 0047 F900 00FF E3EF FA00 F6EF FD00 FDEF"
  904.     $"FD00 F9EF FD00 FDEF FD00 F8EF FD00 FDEF FD00 F9EF FD00 FDEF FC00 F2EF 0300 00EF"
  905.     $"EFFD 00F7 EFFC 00FD EFFC 00FA EFFC 00FE EFFB 00DE EF00 FFF2 0047 F900 00FF E2EF"
  906.     $"FA00 F8EF FD00 FDEF FC00 FAEF FC00 FEEF FC00 F8EF FD00 FDEF FD00 F9EF FD00 FCEF"
  907.     $"FD00 F2EF 0100 00FE EFFD 00F6 EFFD 00FC EFFC 00FB EFFC 00FC EFFC 00E0 EF00 FFF2"
  908.     $"0046 F900 00FF E2EF FA00 F9EF FD00 FDEF FC00 FAEF FC00 FDEF FD00 F8EF FC00 FEEF"
  909.     $"FC00 F9EF FD00 FCEF FD00 F2EF FE00 FEEF FD00 F7EF FC00 FCEF FD00 FAEF FC00 FCEF"
  910.     $"FC00 E1EF 00FF F200 42F9 0000 FFE1 EFFC 00F9 EFFD 00FC EFFC 00FA EFFC 00FE EFFC"
  911.     $"00F8 EFFD 00FD EFFC 00F9 EFFD 00FC EFFD 00F2 EFF6 00F7 EFFD 00FC EFFC 00FA EFFC"
  912.     $"00FC EFFC 00E2 EF00 FFF2 004B F900 00FF E9EF 0100 00FB EFFC 00FA EFFD 00FC EFFC"
  913.     $"00FA EFFC 00FD EFFC 00F8 EFFD 00FD EFFC 00F9 EFFD 00FC EFFC 00F3 EFFE 00FC EFFD"
  914.     $"00F8 EFFC 00FC EFFC 00FA EFFC 00FC EFFC 00E3 EF00 FFF2 004B F900 00FF EAEF 0100"
  915.     $"00FB EFFC 00FA EFFC 00FD EFFC 00F9 EFFC 00FD EFFD 00F7 EFFD 00FD EFFC 00F9 EFFC"
  916.     $"00FD EFFC 00F3 EFFE 00FB EFFD 00F8 EFFC 00FC EFFD 00F9 EFFB 00FD EFFC 00E4 EF00"
  917.     $"FFF2 004B F900 00FF ECEF FD00 FCEF FD00 F8EF FD00 FDEF FD00 F8EF FB00 01EF EFFB"
  918.     $"00F8 EFFC 00FD EFFC 00F9 EFFC 00FD EFFC 00F3 EFFE 00FA EFFD 00F8 EFFC 00FD EFFC"
  919.     $"00F9 EFFB 00FE EFFC 00E4 EF00 FFF2 0040 F900 00FF EDEF FD00 FDEF FC00 F7EF F700"
  920.     $"F5EF F400 F9EF FB00 FEEF FC00 F7EF F200 F5EF FE00 FAEF FB00 FAEF FA00 01EF EFFD"
  921.     $"00F7 EFFA 0001 EFEF FD00 E4EF 00FF F200 3BF9 0000 FFEB EFF8 00F4 EFFA 00F2 EFFC"
  922.     $"0000 EFF9 00FB EFFA 0000 EFF9 00F7 EFFB 0001 EFEF FE00 F3EF FC00 FDEF F800 FBEF"
  923.     $"F700 F4EF F600 E3EF 00FF F200 14F9 0000 FF81 EFDF EFFB 00EF EFFC 00DF EF00 FFF2"
  924.     $"0014 F900 00FF 81EF DEEF FC00 EEEF FC00 E0EF 00FF F200 14F9 0000 FF81 EFDE EFFB"
  925.     $"00EE EFFC 00E1 EF00 FFF2 0014 F900 00FF 81EF DDEF FC00 EDEF FC00 E2EF 00FF F200"
  926.     $"14F9 0000 FF81 EFDC EFFB 00EE EFFB 00E4 EF00 FFF2 0014 F900 00FF 81EF DBEF FA00"
  927.     $"EFEF FA00 E6EF 00FF F200 0CF9 0000 FF81 EFA0 EF00 FFF2 000C F900 00FF 81EF A0EF"
  928.     $"00FF F200 0CF9 0000 FF81 EFA0 EF00 FFF2 0008 F900 81FF 9EFF F200 0481 0087 0004"
  929.     $"8100 8700 0481 0087 0004 8100 8700 0481 0087 0004 8100 8700 00FF"
  930. };
  931.  
  932.  
  933. /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  934.  These are the resources used used for the sound status window. */
  935.  
  936. resource 'WIND' (rStatusWindow, purgeable) {
  937.     {0, 0, kStatusWindowSizeH, kStatusWindowSizeW}, documentProc, invisible, noGoAway, 0x0, "Sound Status"
  938. };
  939.  
  940. resource 'CNTL' (rCancelCntl, purgeable) {
  941.     {
  942.     (kStatusWindowSizeH - kDafaultButSizeH),                                        /* top */
  943.     ((kStatusWindowSizeW - kDafaultButSizeW) / 2),                                /* left */
  944.     (kStatusWindowSizeH - kDafaultButSizeH + kButtonSizeH),                    /* bottom */
  945.     (((kStatusWindowSizeW - kDafaultButSizeW) / 2) + kDafaultButSizeW)    /* right */
  946.     }, 0, visible, 0, 0, pushButProc, 0, "Stop"
  947. };
  948.  
  949. resource 'STR#' (sMessStrings, purgeable) {
  950.     {
  951.     "Playing the sound asynchronously.";
  952.     "Playing the sound asynchronously resampled to middle C.";
  953.     "Playing a C major scale.";
  954.     "Playing “Promenade” from\n Pictures At An Exhibition,\n by Mussorgsky.";
  955.     "Playing middle C with the various timbres.";
  956.     "Playing “Schaut, ihr Sünder”\n by Löwenstern,\n arranged by JS Bach.";
  957.     }
  958. };
  959.  
  960. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  961.  These are the resources used for the sound document window.  This includes
  962.  a string resource that is the name given to an untitled sound resource
  963.  to appear in the list. */
  964.  
  965. resource 'WIND' (rSoundWindow, purgeable) {
  966.     {0, 0, kSoundWindowSizeH, kSoundWindowSizeW}, documentProc, invisible, goAway, 0x0, ""
  967. };
  968.  
  969. /* This rectangle is the position of the list in the document window.  The rectangle
  970.    is the size of the WIND inset by kSndStdSpacing and to the left of the buttons. */
  971. resource 'RECT' (rListRectID, purgeable) {
  972.     {
  973.     kSndStdSpacing,
  974.     kSndStdSpacing,
  975.     (kSoundWindowSizeH - kSndStdSpacing),
  976.     (kSoundWindowSizeW - kSndButtonSizeW - kSndStdSpacing - kSndListButGap)}
  977. };
  978.  
  979. resource 'CNTL' (rPlaySndCntl, purgeable) {
  980. /* [1] */ {
  981.     ((1 * kSndStdSpacing) + (1 * kSndButtonSizeH) - kSndButtonSizeH),    /* top */
  982.     (kSoundWindowSizeW - kSndButtonSizeW - kSndStdSpacing),                /* left */
  983.     ((1 * kSndStdSpacing) + (1 * kSndButtonSizeH)),                            /* bottom */
  984.     (kSoundWindowSizeW - kSndStdSpacing)                                        /* right */
  985.     }, 0, visible, 0, 0, pushButProcUseWFont, 0, "Play Sound"
  986. };
  987.  
  988. resource 'CNTL' (rHyperPlayCntl, purgeable) {
  989. /* [2] */ {
  990.     ((2 * kSndStdSpacing) + (2 * kSndButtonSizeH) - kSndButtonSizeH),    /* top */
  991.     (kSoundWindowSizeW - kSndButtonSizeW - kSndStdSpacing),                /* left */
  992.     ((2 * kSndStdSpacing) + (2 * kSndButtonSizeH)),                            /* bottom */
  993.     (kSoundWindowSizeW - kSndStdSpacing)                                        /* right */
  994.     }, 0, visible, 0, 0, pushButProcUseWFont, 0, "Hyper Play"
  995. };
  996.  
  997. resource 'CNTL' (rPlayScaleCntl, purgeable) {
  998. /* [3] */ {
  999.     ((3 * kSndStdSpacing) + (3 * kSndButtonSizeH) - kSndButtonSizeH),    /* top */
  1000.     (kSoundWindowSizeW - kSndButtonSizeW - kSndStdSpacing),                /* left */
  1001.     ((3 * kSndStdSpacing) + (3 * kSndButtonSizeH)),                            /* bottom */
  1002.     (kSoundWindowSizeW - kSndStdSpacing)                                        /* right */
  1003.     }, 0, visible, 0, 0, pushButProcUseWFont, 0, "Play Scale"
  1004. };
  1005.  
  1006. resource 'CNTL' (rPlayMelodyCntl, purgeable) {
  1007. /* [4] */ {
  1008.     ((4 * kSndStdSpacing) + (4 * kSndButtonSizeH) - kSndButtonSizeH),    /* top */
  1009.     (kSoundWindowSizeW - kSndButtonSizeW - kSndStdSpacing),                /* left */
  1010.     ((4 * kSndStdSpacing) + (4 * kSndButtonSizeH)),                            /* bottom */
  1011.     (kSoundWindowSizeW - kSndStdSpacing)                                        /* right */
  1012.     }, 0, visible, 0, 0, pushButProcUseWFont, 0, "Play Melody"
  1013. };
  1014.  
  1015. resource 'CNTL' (rStopCntl, purgeable) {
  1016. /* [5] */ {
  1017.     ((5 * kSndStdSpacing) + (5 * kSndButtonSizeH) - kSndButtonSizeH),    /* top */
  1018.     (kSoundWindowSizeW - kSndButtonSizeW - kSndStdSpacing),                /* left */
  1019.     ((5 * kSndStdSpacing) + (5 * kSndButtonSizeH)),                            /* bottom */
  1020.     (kSoundWindowSizeW - kSndStdSpacing)                                        /* right */
  1021.     }, 0, visible, 0, 0, pushButProcUseWFont, 0, "Stop Sound"
  1022. };
  1023.  
  1024. resource 'CNTL' (rRecordCntl, purgeable) {
  1025. /* [6] */ {
  1026.     ((6 * kSndStdSpacing) + (6 * kSndButtonSizeH) - kSndButtonSizeH),    /* top */
  1027.     (kSoundWindowSizeW - kSndButtonSizeW - kSndStdSpacing),                /* left */
  1028.     ((6 * kSndStdSpacing) + (6 * kSndButtonSizeH)),                            /* bottom */
  1029.     (kSoundWindowSizeW - kSndStdSpacing)                                        /* right */
  1030.     }, 0, visible, 0, 0, pushButProcUseWFont, 0, "Record Sound"
  1031. };
  1032.  
  1033. resource 'STR ' (rUntitled, purgeable) {
  1034.     "<untitled>"
  1035. };
  1036.  
  1037.  
  1038.